NCB ncb; int i; memset (&ncb, 0, sizeof (ncb)); i_strlen = strlen(LOCALNAME); if (i_strlen > NCBNAMSZ) i_strlen = NCBNAMSZ; memset (ncb.nbc_name, ' ', NCBNAMSZ); memcpy (ncb.nbc_name, LOCALNAME, i_strlen); ncb.ncb_command=NCBDELNAME; uRetCode = Netbios((NCB*) &ncb );В код проекта я внес некоторые изменения. Ну во-первых, сделал глобальной переменную NCB. В этом нет ничего плохого, всё равно memset её обнуляет. И это обязательно надо делать.
....... NCB ncb; .......Во-вторых, объявил глобальную переменную uRetCode
UCHAR uRetCode;Теперь я могу создать функцию, которая будет тестировать возврат и не делать это каждый раз при вызове команд.
void TestNetBiosOperation() { if ( uRetCode != 0 ) { cout << "error " << endl; exit(1); } }Так как NCB глобальная можно создать функцию, которая будет вызывать команду NetBios и сразу тестировать результат.
void RunNetBiosCommand(UCHAR ncb_command) { ncb.ncb_command=ncb_command; uRetCode = Netbios((NCB*) &ncb ); TestNetBiosOperation(); }Так же я написал обещанную функцию GenerateNetBiosName.
void GenerateNetBiosName(unsigned char* chNetBiosName) { int i_strlen; i_strlen = strlen(LOCALNAME); if (i_strlen > NCBNAMSZ) i_strlen = NCBNAMSZ; memset (chNetBiosName, ' ', NCBNAMSZ); memcpy (chNetBiosName, LOCALNAME, i_strlen); }И процедура удаления имеет теперь вид.
void DeleteNetBiosName() { memset (&ncb, 0, sizeof (ncb)); GenerateNetBiosName(ncb.ncb_name); RunNetBiosCommand(NCBDELNAME); }А добавления
void AddNetBiosName() { memset(&ncb, 0, sizeof (ncb)); GenerateNetBiosName(ncb.ncb_name); ncb.ncb_lana_num = LANANUM; RunNetBiosCommand(NCBADDNAME); }Всё можете посмотреть загрузив проект. Но код намного читабельнее. Общий вид программы Вот
void main() { ResetNetBios(); AddNetBiosName(); ViewNetBiosName(); DeleteNetBiosName(); cout << "Canсel" << endl; getch(); }Теперь нужно всё проверить. Скомпилируйте и запустите эту программу, потом не прекращая её запустите из предыдущего примера. У Вас должно быть примерно так.
Как видите в отличии от предыдущего примера несмотря на то, что программа не закончила работу её имени уже нет.